﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace projetoFinal.pages.administracao.associado
{
    public partial class dados : baseWebPage
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            base.Modulo = operaModulo.buscar("ADMINISTRAÇÃO - ASSOCIADO");
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //Arruma o diretório das imagens
                menuTopo.setDiretorio("../");
                menuEsquerda.setDiretorio("../");

                lblTitulo.Text = "Associado";
                btnSalvar.Attributes.Add("onclick", "javascript:return validateForm('frmDados');");
                btnIncluirCarro.Attributes.Add("onclick", "javascript:return validaFormulario();");
                btnIncluirCarro.Attributes.Add("onkeypress", "javascript:return WebForm_FireDefaultButton(event, 'btnIncluirCarro');");

                Int64 id = 0;
                if (Request["id"] != null)
                {
                    id = Int64.Parse(Request["id"].ToString());
                    projetoFinal.associado t = operaAssociado.buscar(id);
                    //Busca os dados e preenche conforme o que está no banco
                    txtCodigo.Value = t.CodAssociado.ToString();
                    txtNome.Value = t.Nome.ToString();
                    txtMatricula.Value = t.Matricula.ToString();
                    txtCpf.Value = string.Format(@"{0:000\.000\.000\-00}", Convert.ToDouble(t.Cpf));
                    txtEndereco.Value = t.Endereco.ToString();
                    txtComplemento.Value = t.Complemento.ToString();
                    txtNumero.Value = t.Numero.ToString();
                    if (t.Cep.Length >= 8)
                    {
                        txtCep.Value = string.Format(@"{0:00000\-000}", Convert.ToDouble(t.Cep));
                    }
                    else
                    {
                        txtCep.Value = string.Empty;
                    }
                    txtBairro.Value = t.Bairro.ToString();
                    txtCidade.Value = t.Cidade.ToString();

                    selUF.Items.FindByValue(t.Uf.ToString()).Selected = true;

                    txtFone.Value = t.Fone.ToString();

                    radStatusAtivo.Checked = t.Status == status.ativo ? true : false;
                    radStatusInativo.Checked = t.Status == status.ativo ? false : true;

                    selSitFinanceira.Items.FindByValue(((int)t.SitFinanceiro).ToString()).Selected = true;

                    bindSeguradora(t.Seguradora.CodCadastro);

                    bindTipoVeiculo();
                    bindListagemCarros(t.CodAssociado);

                    //No caso de edição
                    if (!base.CanUpdate)
                    {
                        this.btnSalvar.Visible = false;
                        this.information.Visible = true;

                        this.btnIncluirCarro.Visible = false;

                        this.lblTitleInformation.Text = "Aviso!";
                        this.lblMessageInformation.Text = "Você não possui permissão para editar registros!";
                    }
                }
                else
                {
                    trInclusaoCarros.Visible = false;

                    bindSeguradora(0);

                    //No caso de inclusão
                    if (!base.CanCreate)
                    {
                        this.btnSalvar.Visible = false;
                        this.information.Visible = true;
                        this.lblTitleInformation.Text = "Aviso!";
                        this.lblMessageInformation.Text = "Você não possui permissão para incluir registros!";
                    }
                }

                txtMatricula.Attributes.Add("onkeypress", "javascript:return permiteSoNumeros(event);");
                txtCpf.Attributes.Add("onkeypress", "javascript:FormataCPF(this); return permiteSoNumeros(event);");
                txtCpf.Attributes.Add("onkeyup", "javascript:FormataCPF(this);");
                txtNumero.Attributes.Add("onkeypress", "javascript:return permiteSoNumeros(event);");

                txtCep.Attributes.Add("onkeypress", "javascript:FormataCEP(this); return permiteSoNumeros(event);");
                txtCep.Attributes.Add("onkeyup", "javascript:FormataCEP(this);");

                txtFone.Attributes.Add("onkeypress", "javascript:FormataFone(this); return permiteSoNumeros(event);");
                txtFone.Attributes.Add("onkeyup", "javascript:FormataFone(this);");

                selTipoVeiculo.Attributes.Add("onkeypress", "javascript:return WebForm_FireDefaultButton(event, 'btnIncluirCarro');");
                txtMarca.Attributes.Add("onkeypress", "javascript:return WebForm_FireDefaultButton(event, 'btnIncluirCarro');");
                txtModelo.Attributes.Add("onkeypress", "javascript:return WebForm_FireDefaultButton(event, 'btnIncluirCarro');");

                txtAno.Attributes.Add("onkeypress", "javascript:return WebForm_FireDefaultButton(event, 'btnIncluirCarro');");
                txtAno.Attributes.Add("onkeydown", "javascript:return permiteSoNumeros(event);");

                txtPlaca.Attributes.Add("onkeypress", "javascript:FormataPlaca(this); return WebForm_FireDefaultButton(event, 'btnIncluirCarro');");
                txtPlaca.Attributes.Add("onkeyup", "javascript:FormataPlaca(this);");
            }
        }
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            projetoFinal.associado t = null;
            if (Request["id"] != null)
            {
                projetoFinal.seguradora objSeguradora = operaSeguradora.buscar(Int64.Parse(selSeguradora.Items[selSeguradora.SelectedIndex].Value));
                status s = radStatusAtivo.Checked ? status.ativo : status.inativo;
                situacaoFinanceira f = (situacaoFinanceira)(int.Parse(selSitFinanceira.Items[selSitFinanceira.SelectedIndex].Value));

                t = operaAssociado.buscar(Int64.Parse(Request["id"].ToString()));
                t.Nome = txtNome.Value;
                t.Matricula = txtMatricula.Value;
                t.Cpf = txtCpf.Value.Replace(".", "").Replace("-", "");
                t.Endereco = txtEndereco.Value;
                t.Complemento = txtComplemento.Value;
                t.Numero = txtNumero.Value;
                t.Cep = txtCep.Value.Replace("-", "");
                t.Bairro = txtBairro.Value;
                t.Cidade = txtCidade.Value;
                t.Uf = selUF.Items[selUF.SelectedIndex].Value;
                t.Fone = txtFone.Value;
                

                t.Seguradora = objSeguradora;
                t.SitFinanceiro = f;
                t.Status = s;

                //Edição
                int cont = operaAssociado.editar(t);
                if (cont > 0)
                {
                    Response.Redirect("listagem.aspx?msg=1", false);
                }
                else
                {
                    Response.Redirect("listagem.aspx?msg=2", false);
                }
            }
            else
            {
                projetoFinal.seguradora objSeguradora = operaSeguradora.buscar(Int64.Parse(selSeguradora.Items[selSeguradora.SelectedIndex].Value));
                status s = radStatusAtivo.Checked ? status.ativo : status.inativo;
                situacaoFinanceira f = (situacaoFinanceira)(int.Parse(selSitFinanceira.Items[selSitFinanceira.SelectedIndex].Value));

                t = new projetoFinal.associado(0, objSeguradora, txtNome.Value, txtMatricula.Value, s, f);

                t.Cpf = txtCpf.Value.Replace(".", "").Replace("-", "");
                t.Endereco = txtEndereco.Value;
                t.Complemento = txtComplemento.Value;
                t.Numero = txtNumero.Value;
                t.Cep = txtCep.Value.Replace("-", "");
                t.Bairro = txtBairro.Value;
                t.Cidade = txtCidade.Value;
                t.Uf = selUF.Items[selUF.SelectedIndex].Value;
                t.Fone = txtFone.Value;
                
                //Inclusão
                int cont = operaAssociado.incluir(t);
                if (cont > 0)
                {
                    Response.Redirect("listagem.aspx?msg=3", false);
                }
                else
                {
                    Response.Redirect("listagem.aspx?msg=4", false);
                }
            }
        }
        protected void btnIncluirCarro_Click(object sender, EventArgs e)
        {
            projetoFinal.associado objAssociado = operaAssociado.buscar(Int64.Parse(Request["id"]));
            projetoFinal.tipoVeiculo objTipoVeiculo = operaTipoVeiculo.buscar(Int64.Parse(selTipoVeiculo.Items[selTipoVeiculo.SelectedIndex].Value));

            projetoFinal.associadoCarro o = new associadoCarro(0, objAssociado, objTipoVeiculo, txtMarca.Value, txtModelo.Value, Int32.Parse(txtAno.Value), txtPlaca.Value);
            //Insere o carro para o associado
            operaAssociadoCarro.incluir(o);
            //Atualiza a tabela com os carros
            bindListagemCarros(objAssociado.CodAssociado);
            //Limpa os texts
            selTipoVeiculo.SelectedIndex = 0;
            txtMarca.Value = string.Empty;
            txtModelo.Value = string.Empty;
            txtAno.Value = string.Empty;
            txtPlaca.Value = string.Empty;
        }

        private void bindSeguradora(Int64 codCadastro)
        {
            string strField = string.Empty;
            string strValue = string.Empty;

            if (this.CodCadastro.HasValue)
            {
                strField = " codCadastro ";
                strValue = this.CodCadastro.Value.ToString();

                codCadastro = this.CodCadastro.Value;
            }

            selSeguradora.DataSource = operaSeguradora.listar(strField, strValue, 0);
            selSeguradora.DataTextField = "nome";
            selSeguradora.DataValueField = "codCadastro";
            selSeguradora.DataBind();

            selSeguradora.Items.Insert(0, new ListItem("Selecione...", ""));
            if (codCadastro != 0)
            {
                selSeguradora.Items.FindByValue(codCadastro.ToString()).Selected = true;
            }
        }
        private void bindTipoVeiculo()
        {
            selTipoVeiculo.DataSource = operaTipoVeiculo.listar("", "", 0);
            selTipoVeiculo.DataTextField = "descr";
            selTipoVeiculo.DataValueField = "codTipoVeiculo";
            selTipoVeiculo.DataBind();
            selTipoVeiculo.Items.Insert(0, new ListItem("Selecione...", ""));
        }
        private void bindListagemCarros(Int64 codAssociado)
        {
            List<projetoFinal.associadoCarro> lstAssociadoCarro = operaAssociadoCarro.listar("codAssociado", codAssociado.ToString(), 0);
            if (lstAssociadoCarro.Count > 0)
            {
                tblListagemCarros.Visible = true;
                tblListagemCarros.DataSource = lstAssociadoCarro;
                tblListagemCarros.DataBind();
            }
        }

        protected void tblListagemCarros_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                HtmlInputCheckBox chkListagem = (HtmlInputCheckBox)e.Item.FindControl("chkListagem");
                Literal lblCodigo = (Literal)e.Item.FindControl("lblCodigo");
                Literal lblTipoVeiculo = (Literal)e.Item.FindControl("lblTipoVeiculo");
                Literal lblMarca = (Literal)e.Item.FindControl("lblMarca");
                Literal lblModelo = (Literal)e.Item.FindControl("lblModelo");
                Literal lblAno = (Literal)e.Item.FindControl("lblAno");
                Literal lblPlaca = (Literal)e.Item.FindControl("lblPlaca");

                projetoFinal.associadoCarro o = (projetoFinal.associadoCarro)e.Item.DataItem;

                if ((chkListagem != null) && (lblCodigo != null) && (lblTipoVeiculo != null) && (lblMarca != null) && (lblModelo != null) && (lblAno != null) && (lblPlaca != null))
                {
                    chkListagem.Value = o.CodAssociadoCarro.ToString();
                    lblCodigo.Text = o.CodAssociadoCarro.ToString();
                    lblTipoVeiculo.Text = o.TipoVeiculo.Descr.ToString();
                    lblMarca.Text = o.Marca.ToString();
                    lblModelo.Text = o.Modelo.ToString();
                    if (o.Ano.HasValue)
                    {
                        lblAno.Text = o.Ano.Value.ToString();
                    }
                    else
                    {
                        lblAno.Text = "-";
                    }
                    lblPlaca.Text = o.Placa.ToString();
                }
            }
            if (e.Item.ItemType == ListItemType.Footer)
            {
                ImageButton imgDeletar = (ImageButton)e.Item.FindControl("imgDeletar");
                if (imgDeletar != null)
                {
                    if (base.CanDelete)
                    {
                        imgDeletar.Attributes.Add("onclick", "javascript:return apagar();");
                    }
                    else
                    {
                        imgDeletar.Attributes.Add("onclick", "javascript:alert('Você não tem permissão para apagar registros!'); return false;");
                    }
                }
            }
        }
        protected void tblListagemCarros_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName == "deletar")
            {
                foreach (DataListItem tblItem in tblListagemCarros.Items)
                {
                    HtmlInputCheckBox chkListagem = (HtmlInputCheckBox)tblItem.FindControl("chkListagem");
                    if (chkListagem != null)
                    {
                        if (chkListagem.Checked)
                        {
                            //Apaga os carros do associado
                            operaAssociadoCarro.apagar(Int64.Parse(chkListagem.Value));
                        }
                    }
                }
                bindListagemCarros(Int64.Parse(Request["id"]));
            }
        }
    }
}